<?php
namespace app\apijson\query;

/**
 * PathAssigner
 *
 * 负责处理 total@/num@/info@ 等路径赋值和重命名，兼容 APIJSON 路径语法。
 * 由 QueryBuilder 调用。
 */
class PathAssigner
{
    /**
     * 路径赋值和重命名
     * @param array $parsed 解析后的原始结构
     * @param array $result 已构建的结果
     * @return array        赋值和重命名后的最终结果
     */
    public function assign($parsed, $result)
    {
        // 路径赋值
        foreach ($parsed as $key => $value) {
            if (strpos($key, '@') !== false && is_string($value) && preg_match('#^/\[\]/(\w+)$#', $value, $m)) {
                $field = $m[1];
                if (isset($result[$field])) {
                    $result[$key] = $result[$field];
                }
            }
        }
        // 路径赋值后自动重命名：sum@ -> sum，num@ -> num，info@ -> info，并删除原 total 字段和 @ 字段
        foreach (array_keys($result) as $key) {
            if (strpos($key, '@') !== false) {
                $newKey = strstr($key, '@', true);
                $result[$newKey] = $result[$key];
                if ($newKey !== 'total' && isset($result['total']) && $result[$key] === $result['total']) {
                    unset($result['total']);
                }
                unset($result[$key]);
            }
        }
        // 如果 query=1，去掉 '[]' 字段
        if (isset($parsed['[]']['query']) && $parsed['[]']['query'] == 1 && isset($result['[]'])) {
            unset($result['[]']);
        }
        return $result;
    }
} 